﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Drawing.Imaging;

namespace TuyenDungViecLam.CommonResource
{
    public class CommonFunction
    {
        public static void CreateCaptcha()
        {
            string[] fonts = { "Arial Black" };
            const byte LENGTH = 5;
            // chuỗi để lấy các kí tự sẽ sử dụng cho captcha
            const string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
            Bitmap bmp = new Bitmap(80, 30);
            //using (bmp)
            {
                using (Graphics g = Graphics.FromImage(bmp))
                {
                    // Tạo nền cho ảnh dạng sóng
                    HatchBrush brush = new HatchBrush(HatchStyle.SmallCheckerBoard, Color.White, Color.Wheat);
                    g.FillRegion(brush, g.Clip);
                    // Lưu chuỗi captcha trong quá trình tạo

                    StringBuilder strCaptcha = new StringBuilder();
                    Random rand = new Random();
                    if (Utilities.CStrDef(HttpContext.Current.Session["captcha"], "") == "")
                    {
                        for (int i = 0; i < LENGTH; i++)
                        {
                            // Lấy kí tự ngẫu nhiên từ mảng chars
                            string str = chars[rand.Next(chars.Length)].ToString();
                            strCaptcha.Append(str);
                            // Tạo font với tên font ngẫu nhiên chọn từ mảng fonts
                            Font font = new Font(fonts[rand.Next(fonts.Length)], 12);
                            // Lấy kích thước của kí tự
                            SizeF size = g.MeasureString(str, font);
                            // Vẽ kí tự đó ra ảnh tại vị trí tăng dần theo i, vị trí top ngẫu nhiên
                            g.DrawString(str, font,
                            Brushes.Chocolate, i * 15, 2);
                            font.Dispose();
                        }
                    }
                    else
                    {
                        bmp = (Bitmap)HttpContext.Current.Session["captcha_bmp"];
                        strCaptcha.Append(Utilities.CStrDef(HttpContext.Current.Session["captcha"], ""));
                    }

                    // Lưu captcha vào session
                    HttpContext.Current.Session["captcha"] = strCaptcha.ToString();
                    HttpContext.Current.Session["captcha_bmp"] = bmp;
                    // Ghi ảnh trực tiếp ra luồng xuất theo định dạng gif
                    HttpContext.Current.Response.ContentType = "image/GIF";
                    bmp.Save(HttpContext.Current.Response.OutputStream, ImageFormat.Gif);
                }
            }
        }
    }
}
